package br.bd2.protocolo2PL.entity;

import java.util.Scanner;

import br.bd2.protocolo2PL.constantes.StatusLinhaBloqueio;
import br.bd2.protocolo2PL.constantes.TiposDeBloqueios;

/**
 * Classe teste que realiza a leitura do schedule e vai adicionando linhas de bloqueio
 * @author braulio
 *
 */
public class TesteLinhaDeBloqueio {
	
	public static final String LEITURA = "rd";
	public static final String ESCRITA = "wr";
	public static final String UPDATE = "up";
	public static final String INTENCIONAL_LEITURA = "ir";
	public static final String INTENCIONAL_ESCRITA = "iw";
	public static final String INTENCIONAL_UPDATE = "iu";

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		LinhaDeBloqueio linha;
		String obid = null;
		String trid = null;
		int operacao = 0;
		Scanner io = new Scanner(System.in);
		String Schedule;
		String[] comandos;
		String strOperacao;
		int delimitador;
		int count = 0;
		
		System.out.println("Bem vindo ao escalonador 2PL!: Digite o Schedule");
		Schedule = "rd1(t1);wr2(t2);rd3(tab1);co1;co2;co3";
		comandos = Schedule.split(";");
		for (String comando : comandos) {
			strOperacao =  comando.substring(count, count+2);
			delimitador = comando.indexOf(")");
			switch (strOperacao) {
			case LEITURA:
				operacao = TiposDeBloqueios.leitura;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;
				
			case UPDATE:
				operacao = TiposDeBloqueios.update;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;
				
			case ESCRITA:
				operacao = TiposDeBloqueios.escrita;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;
				
			case INTENCIONAL_LEITURA:
				operacao = TiposDeBloqueios.intencional_leitura;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;
				
			case INTENCIONAL_UPDATE:
				operacao = TiposDeBloqueios.intencional_update;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;
				
			case INTENCIONAL_ESCRITA:
				operacao = TiposDeBloqueios.intencional_escrita;
				trid = comando.substring(count + 2, count + 3);
				obid = comando.substring(count + 4, delimitador);
				break;

			default:
				break;
			}
			
			linha = new LinhaDeBloqueio(trid, obid, operacao, StatusLinhaBloqueio.AGUARDANDO);
			
			System.out.printf("Trid: %s obid: %s operacao: %d status: %s \n", linha.getTrid(), linha.getObid(), linha.getOperacao(), linha.getStatus());
		}

	}

}
